//                            _ooOoo_  
//                           o8888888o  
//                           88" . "88  
//                           (| -_- |)  
//                            O\ = /O  
//                        ____/`---'\____  
//                      .   ' \\| |// `.  
//                       / \\||| : |||// \  
//                     / _||||| -:- |||||- \  
//                       | | \\\ - /// | |  
//                     | \_| ''\---/'' | |  
//                      \ .-\__ `-` ___/-. /  
//                   ___`. .' /--.--\ `. . __  
//                ."" '< `.___\_<|>_/___.' >'"".  
//               | | : `- \`.;`\ _ /`;.`/ - ` : | |  
//                 \ \ `-. \_ __\ /__ _/ .-` / /  
//         ======`-.____`-.___\_____/___.-`____.-'======  
//                            `=---='  
//  
//         .............................................  
//                  佛祖保佑             永无BUG 
//          佛曰:  
//                  写字楼里写字间，写字间里程序员；  
//                  程序人员写程序，又拿程序换酒钱。  
//                  酒醒只在网上坐，酒醉还来网下眠；  
//                  酒醉酒醒日复日，网上网下年复年。  
//                  但愿老死电脑间，不愿鞠躬老板前；  
//                  奔驰宝马贵者趣，公交自行程序员。  
//                  别人笑我忒疯癫，我笑自己命太贱；  
//                  不见满街漂亮妹，哪个归得程序员？  
package com.manjason.property;

import java.text.MessageFormat;
import java.util.Arrays;

import com.manjason.property.dao.PropertyDao;
import com.manjason.property.dao.impl.PropertyDaoImpl;
import com.manjason.property.enums.PropertyType;
import com.manjason.property.listener.PlayerListener;
import com.manjason.property.task.PlayerHealthTask;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.event.HandlerList;
import org.bukkit.event.Listener;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.java.JavaPlugin;

import com.manjason.property.lang.Lang;
import com.manjason.property.util.Util;

public class Property extends JavaPlugin {

	public FileConfiguration config;
	private static Property instance = null;
	private PropertyDao propertyDao;

	public static Property getInstance() {
		return instance;
	}

	public PropertyDao getPropertyDao () {
		return propertyDao;
	}

	public void onLoad() {
		instance = this;
		saveDefaultConfig();
		saveResource("lang_zh.yml", false);
		this.config = getConfig();
		loadConfig ();
		try {
			propertyDao = new PropertyDaoImpl();
		} catch (Exception e) {
			System.out.println("数据库初始化失败!");
		}
		System.out.println(MessageFormat.format(Util.convertColor(Lang.get(1)), this.getName()));
	}

	public void onEnable() {
		Bukkit.getScheduler().runTaskTimerAsynchronously(this, new PlayerHealthTask(), 1000, 1000);
		Bukkit.getPluginManager().registerEvents(new PlayerListener(), this);
		System.out.println(MessageFormat.format(Util.convertColor(Lang.get(2)), this.getName()));
	}

	public void onDisable() {
		HandlerList.unregisterAll((Plugin) this);
		Bukkit.getScheduler().cancelTasks(this);
		System.out.println(MessageFormat.format(Util.convertColor(Lang.get(3)), this.getName()));
	}

	public void onReload() {
		Lang.reload();
		reloadConfig();
		this.config = getConfig();
		loadConfig ();
		System.out.println(MessageFormat.format(Util.convertColor(Lang.get(4)), this.getName()));
	}
	
	public void loadConfig () {
		
	}

	@Override
	public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
		String cmd = command.getName();
		if (args.length == 1) {
			if (args[0].equalsIgnoreCase("help")) {
				Util.sendMsg(sender, Util.convertColor(Lang.get(5)));
				Util.sendMsg(sender, Util.convertColor(Lang.get(6)));
				Util.sendMsg(sender, Util.convertColor(Lang.get(7)));
				Util.sendMsg(sender, Util.convertColor(Lang.get(8)));
				Util.sendMsg(sender, Util.convertColor(Lang.get(9)));
				Util.sendMsg(sender, Util.convertColor(Lang.get(10)));
				return true;
			}
			if (args[0].equalsIgnoreCase("reload")) {
				onReload();
			}
			if (args[0].equalsIgnoreCase("type")) {
				Util.sendMsg(sender, Util.convertColor(Lang.get(11)));
				Util.sendMsg(sender, Arrays.toString(PropertyType.values()));
			}
		}
		if (args.length > 1) {
			if (args[0].equalsIgnoreCase("clear")) {

			}
			if (args[0].equalsIgnoreCase("set")) {
				if (args.length == 4) {
					PropertyType pt = PropertyType.getPropertyTypeByName(args[1]);
					if (null == pt) {
						Util.sendMsg(sender, Util.convertColor(Lang.get(13)));
						return true;
					}
					com.manjason.property.entity.Property property = getPropertyDao().findPropertyEntityByPlayerName(args[2]);
					if (null == property) {
						property = new com.manjason.property.entity.Property();
					}
					switch (pt) {
						case IQ:
							property.setIq(Integer.parseInt(args[3]));
							break;
						case LUCK:
							property.setLuck(Integer.parseInt(args[3]));
							break;
						case QUICK:
							property.setQuick(Integer.parseInt(args[3]));
							break;
						case SPIRIT:
							property.setSpirit(Integer.parseInt(args[3]));
							break;
						case PHYSICAL:
							property.setPhysical(Integer.parseInt(args[3]));
							break;
						case PHYSIQUE:
							property.setPhysique(Integer.parseInt(args[3]));
							break;
					}
					getPropertyDao().saveOrUpdate(property);
					Util.sendMsg(sender, Util.convertColor(Lang.get(14)));
					return true;
				}
				Util.sendMsg(sender, Util.convertColor(Lang.get(12)));
				return false;
			}
		}
		return false;
	}

}